#ifndef _PROJECT_H_
#define _PROJECT_H_
#include <iostream>
#include <string>
#include <memory>

#ifdef __cplusplus
extern "C"
{
    #include <stdbool.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <sys/mman.h>
    #include <fcntl.h>
    #include <unistd.h>
    #include <linux/input.h>
}
#endif
#define TOUCH_DEV_PATH "/dev/input/event6"
#define LCD_DEV_PATH "/dev/fb0"

using namespace std;

//设备类
class DEVICE
{
public:
    DEVICE()
    {

    }
    DEVICE(string set_dev_path);
    ~DEVICE()
    {
        if(this->Dev_Free() == false)
        {
            cout<<"设备关闭异常！"<<endl;
            exit(-1);
        }
    }


    //基类的公共属性
    string dev_file_path;
    int dev_fd;

    //基类的公共行为
    bool Dev_Init();  //打开设备文件
    bool Dev_Free();
};


//LCD类
class LCD : public DEVICE
{
    public:

    LCD()
    {

    }
    
    LCD(string lcd_dev_path);

    //属性
    int lcd_w;
    int lcd_h;
    int * mmap_star;
    

    //行为
    bool Lcd_Star();//lcd运行启动：ioctl动态去获取LCD的分辨率 进行映射
    bool Dispaly_Pic(const char * pic_path); //默认居中显示
};


//触摸屏类
class TOUCH : public DEVICE
{
public:
    TOUCH()
    {

    }
    TOUCH(string touch_dev_path);

    //属性
    int touch_max_x;
    int touch_max_h;
    int touch_min_x;
    int touch_min_h;
    int present_touch_x; //当前触摸的x坐标
    int present_touch_y; //当前触摸的y坐标

    //获取当前触摸xy坐标 点触事件
    bool Get_Touch_Inf();

    //滑动事件
    int Get_Silde_Inf(); // 1:左滑 2：右滑 3：上滑  4：下滑
};

#endif